Exor (Normal User)
Rookie
Messaggi: 30
Iscritto: 29/08/2009
|
salve
sto cercando di capire come mai non funziona la lettura da floppy.
Ho fatto un bootloader, e voglio cercare di leggere il bootloader per creare un loop.
siccome il bootloader si trova nel primo settore, io cerco di leggere così
Codice sorgente - presumibilmente Altri Linguaggi |
mov ax, 0x7c00
mov es, ax
mov ch, 0 ; track
mov cl, 0 ; sector
mov dh, 0 ; head
mov dl, 0 ; drive
mov ah, 0x02
mov al, 0x1 ;settori da leggere
mov bx, 0x200
int 0x13
|
dopo questo codice faccio un jc per saltare alla parte della lettura riuscita
Codice sorgente - presumibilmente Altri Linguaggi |
jc ReadSectors.Error
jmp ReadSectors.Done
ReadSectors.Error:
mov si, loadsectors.rootdirerr
call PrintStr
ret
ReadSectors.Done:
mov si, loadsectors.rootdirsuccess
call PrintStr
jmp 0x200
ret
|
il messaggio di riuscita della lettura appare, però quando dovrebbe saltare all'indirizzo 0x200, non succede niente... ho provato anche a sostituire 0x200 nel jmp con 0x7c00:0x200 tanto per essere sicuro che non fosse un problema d'indirizzo, ma non funziona lo stesso.
potreste aiutarmi a capire cosa non va ?
grazie mille |
|
nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
Come stai provando il programma (macchina fisica? Virtuale?)
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Exor (Normal User)
Rookie
Messaggi: 30
Iscritto: 29/08/2009
|
virtuale :S
infatti ho pensato pure io che possano essere diversi gli interrupt, però almeno il carry flag si dovrebbe settare no ?
siccome non si setta ho pensato che avesse letto...
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
No ... non c'è differenza ... ma il codice che sta a partire dall'indirizzo 7c00:0200 qual è ?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Exor (Normal User)
Rookie
Messaggi: 30
Iscritto: 29/08/2009
|
allora a 7c00:0000 c'è il bootloader che carica il bios, 512 byte dopo (0x0200) volevo caricare il settore dal floppy
e qui c'è il problema ...
dice che la lettura è avvenuta perkè non si setta il carry flag, però quando faccio jmp 7c00:200 non fa niente ...
dovrebbe ricaricare di nuovo il bootloader ma non lo fa
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
Ripeto la domanda ... quale codice c'e' a partire da 7c00:0200 ? Come ti accorgi che il jmp non ha avuto effetto?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Exor (Normal User)
Rookie
Messaggi: 30
Iscritto: 29/08/2009
|
O_O FUNZIONAAAAAAAA
era l'indirizzo dove caricavo i dati ... invece di 0x200 ho provato 0x700 ed è andata
però è strano dovrei avere a disposizione tutta la memoria tranne l'ultimo segmento e quello del bootloader
EDIT:
è andata anche con 0x200 ... -.-
ho solo cambiato l'indirizzo del jmp .. invece di saltare a 0x200 era 0x200:0x0
dovevo specificare anche l'offset (infatti essendo in real mode -.-)
grazie per l'aiuto, grande forum
Ultima modifica effettuata da Exor il 26/02/2010 alle 15:30 |
|